package br.com.remedioCerto.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.remedioCerto.model.Horario;
import br.com.remedioCerto.model.Receita;

public class HorarioDao extends BasicoDao<Horario> {

	public static final String HORARIO_TB = "HORARIO";
	 
	public static final String HORARIO_COLUNA_ID = "ID";
	public static final String HORARIO_COLUNA_RECEITA_ID = "RECEITA_ID";
	public static final String HORARIO_COLUNA_HORA = "HORA";
	public static final String HORARIO_COLUNA_MINUTO = "MINUTO";
	public static final String HORARIO_COLUNA_DOSE = "DOSE";
	
	 
	public static final String HORARIO_CREATE_TABLE = "CREATE TABLE "	
						+ HORARIO_TB + "  (" 
						+ HORARIO_COLUNA_ID 		+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
						+ HORARIO_COLUNA_RECEITA_ID + " INTEGER NOT NULL, " 
						+ HORARIO_COLUNA_HORA 		+ " INTEGER NOT NULL, " 
						+ HORARIO_COLUNA_MINUTO 	+ " INTEGER NOT NULL, "
						+ HORARIO_COLUNA_DOSE 		+ " REAL 	NOT NULL, "
						
						+ " FOREIGN KEY("+HORARIO_COLUNA_RECEITA_ID+") REFERENCES "
						+ ReceitaDao.RECEITA_TB + "(" + ReceitaDao.RECEITA_COLUNA_ID + "));";
	
	
	public HorarioDao(Context context) {
		super(context);
	}

	@Override
	protected ContentValues toContent(Horario horario) {
		ContentValues cv = new ContentValues();
		cv.put(HORARIO_COLUNA_HORA, horario.getHora());
		cv.put(HORARIO_COLUNA_MINUTO, horario.getMinuto());
		cv.put(HORARIO_COLUNA_DOSE, horario.getDose());
		cv.put(HORARIO_COLUNA_RECEITA_ID, horario.getReceita().getId());
		return cv;
	}

	@Override
	protected Horario fromCursor(Cursor c) {
		if (c == null || c.getCount() < 1) {
			return null;
		}
	
		Horario horario = new Horario();
		
		horario.setId(c.getLong(c.getColumnIndex(HORARIO_COLUNA_ID)));
		horario.setHora(c.getInt(c.getColumnIndex(HORARIO_COLUNA_HORA)));
		horario.setMinuto(c.getInt(c.getColumnIndex(HORARIO_COLUNA_MINUTO)));
		horario.setDose(c.getDouble(c.getColumnIndex(HORARIO_COLUNA_DOSE)));
	
		Receita receita = new Receita();
		receita.setId(c.getLong(c.getColumnIndex(HORARIO_COLUNA_RECEITA_ID)));
		horario.setReceita(receita);
		
		return horario;
	}

	public void adiciona(Horario horario){
		
		Long id = inserir(HORARIO_TB, toContent(horario));
		if(id!= null && id > 0)horario.setId(id);
	}
	
	public void atualiza(Horario horario){
		
		atualizar(HORARIO_TB, toContent(horario), HORARIO_COLUNA_ID,horario.getId());
	}

	public void remove(Long id){
		remover(HORARIO_TB, HORARIO_COLUNA_ID, id);
	}

	public Cursor lista(){
		return consultarTodos(HORARIO_TB);
	}
	
	public List<Horario> listaList() {
		List<Horario> listaEstoque = new ArrayList<Horario>();
		Cursor c = lista();
	
		while (!c.isAfterLast()) {
			Horario e = fromCursor(c);
			listaEstoque.add(e);
			c.moveToNext();
		}
		c.close();

		return listaEstoque;
	}
	
	public List<Horario> listaPorReceita(Long receitaId) {
		List<Horario> listaHorario = new ArrayList<Horario>();
		String condicao= HORARIO_COLUNA_RECEITA_ID +" = "+receitaId ;
		Cursor c = consultaBasica(HORARIO_TB, null, condicao , null);
		
		while (!c.isAfterLast()) {
			Horario e = fromCursor(c);
			listaHorario.add(e);
			c.moveToNext();
		}
		c.close();

		return listaHorario;
	}
	
	public boolean removerPorReceita(long receitaId) {

		return  database.delete(HORARIO_TB, HORARIO_COLUNA_RECEITA_ID + " = " + receitaId, null) > 0;
	}
	
}
